perm filename LMDRAW.LSP[DEN,LMM] blob sn#042532 filedate 1973-05-19 generic text, type T, neo UTF8

(DEFPROP LMDRAWFNS
 (LMDRAWFNS NOSCALE?
	    STAR
	    ACROSSMARKER
	    ABOVE
	    LINEUP
	    TOTEMPOLE
	    TEXT?
	    DRAWLIS
	    RPOS
	    MAKELOCATION
	    FOLLOWTEXT
	    CRAMWORD
	    LOCATION
	    REV
	    CONJOIN
	    FITIN
	    BOX
	    UNIONPIC
	    STREAMLIST?
	    S
	    CHARSIZE
	    XBOT
	    XSCL
	    YBOT
	    YSCL
	    STREAM?
	    FOLLOW
	    SCALE
	    DPOS
	    SCALEY
	    SCALEX
	    POS
	    DOWNVEC
	    UPVEC
	    CHARHEIGHT
	    (SPECIAL XBOT XSCL YBOT YSCL CHARSIZE DOWNVEC UPVEC CHARHEIGHT)
	    (RECORD (QUOTE STREAM) (QUOTE (STREAM-ID FIRSTLOC . RESTLOCS)))
	    (RECORD (QUOTE STREAMLIST) (QUOTE (STREAMLIST-ID . STREAMS)))
	    SCALE?
	    (RECORD (QUOTE SCALEREC) (QUOTE (SCALE-ID XLOC YLOC XSCLE YSCLE . UNSCALED)))
	    (RECORD (QUOTE LOCREC) (QUOTE (LOCID LOCFIELD . UNLOCATED)))
	    LOCREC?
	    (RECORD (QUOTE TEXTNODE) (QUOTE (TEXTID TEXTLOC . THE-TEXT)))
	    (DEFLIST (QUOTE
		      ((STREAM-ID STREAM)
		       (TEXTID TEXT)
		       (TEXTLOC (0. . 0.))
		       (STREAMLIST-ID STREAMLIST)
		       (SCALE-ID SCALE)
		       (LOCID LOCREC)
		       (YLOC 0.)
		       (XLOC 0.)
		       (XSCLE 1.)
		       (YSCLE 1.)))
		     (QUOTE RECDEFAULT))
	    (SETQ ARROWFLAG NIL))
VALUE)

(DEFPROP NOSCALE?
 (LAMBDA(L)
  (LIST	(QUOTE AND)
	(LIST (QUOTE CONSP) (CADR L))
	(CONS (QUOTE EQ) (CONS (LIST (QUOTE CAR) (CADR L)) (QUOTE ((QUOTE NOSCALE)))))))
MACRO)

(DEFPROP STAR
 (LAMBDA(N)
  (CONS	(QUOTE NOSCALE)
	(SELECTQ N
		 (0. (HELP))
		 (1. (QUOTE (STREAM (0. . 0.) (0. . 20.))))
		 (2. (QUOTE (STREAMLIST (STREAM (0. . 0.) (-14. . 20.)) (STREAM (0. . 0.) (14. . 20.)))))
		 (3.
		  (QUOTE
		   (STREAMLIST (STREAM (0. . 0.) (-14. . 20.))
			       (STREAM (0. . 0.) (0. . 20.))
			       (STREAM (0. . 0.) (14. . 20.)))))
		 (4.
		  (QUOTE
		   (STREAMLIST (STREAM (0. . 0.) (-14. . 20.))
			       (STREAM (0. . 0.) (7. . 20.))
			       (STREAM (0. . 0.) (-7. . 20.))
			       (STREAM (0. . 0.) (14. . 20.)))))
		 (HELP))))
EXPR)

(DEFPROP ACROSSMARKER
 (LAMBDA(XMIN XMAX YMIN DELTY)
  (COND	(ARROWFLAG
	 (PROG (T2 T4 S S2 S4 X TEMPVAR)
	       (SETQ S4 (TIMES (SETQ S2 (TIMES (SETQ S (TIMES DELTY 0.09999999)) 0.5)) 0.5))
	       (SETQ T4
		     (TIMES 0.5 (SETQ T2 (TIMES 0.5 (SETQ TEMPVAR (TIMES 0.09999999 (DIFFERENCE XMAX XMIN)))))))
	       (SETQ X (TIMES 0.5 (PLUS XMIN XMAX)))
	       (RETURN
		(SUBPAIR (QUOTE (X-T2 X+T2 X YMIN Y+S2 X-T4 X+T4 Y+S Y+S4))
			 (LIST (DIFFERENCE X T2)
			       (PLUS X T2)
			       X
			       YMIN
			       (PLUS YMIN S2)
			       (DIFFERENCE X T4)
			       (PLUS X T4)
			       (PLUS YMIN S)
			       (PLUS YMIN S4))
			 (QUOTE
			  (STREAMLIST (STREAM (X-T2 . Y+S2) (X . YMIN) (X+T2 . Y+S2))
				      (STREAM (X-T4 . Y+S4) (X-T4 . Y+S))
				      (STREAM (X+T4 . Y+S4) (X+T4 . Y+S))))))))
	(T (LIST (QUOTE STREAM) (CONS XMIN YMIN) (CONS XMAX YMIN)))))
EXPR)

(DEFPROP ABOVE
 (LAMBDA (A B) (PROG (ARROWFLAG) (SETQ ARROWFLAG T) (RETURN (TOTEMPOLE (LIST B A) -100. 100. -400. 400.))))
EXPR)

(DEFPROP LINEUP
 (LAMBDA(L)
  (PROG	(OLDH)
	(SETQ OLDH HORIZONTALFLAG)
	(RETURN
	 (PROG (HORIZONTALFLAG)
	       (SETQ HORIZONTALFLAG (NOT OLDH))
	       (RETURN
		(COND (HORIZONTALFLAG (CONJOIN L -400. 400. -400. 400.))
		      (T (TOTEMPOLE L -400. 400. -400. 400.))))))))
EXPR)

(DEFPROP TOTEMPOLE
 (LAMBDA(LPICS XMIN XMAX YMIN YMAX)
  (PROG	(RSLT DELTY TEM)
	(SETQ DELTY (QUOTIENT (DIFFERENCE YMAX YMIN) (LENGTH LPICS)))
   LP	(COND ((NULL LPICS) (RETURN RSLT)))
	(SETQ TEM (FITIN (CAR LPICS) XMIN XMAX YMIN (PLUS YMIN (TIMES 0.79999999 DELTY))))
	(COND
	 ((CDR LPICS)
	  (SETQ RSLT (UNIONPIC RSLT (ACROSSMARKER XMIN XMAX (PLUS YMIN (TIMES 0.89999999 DELTY)) DELTY)))))
	(SETQ YMIN (PLUS YMIN DELTY))
	(SETQ RSLT (UNIONPIC RSLT TEM))
	(SETQ LPICS (CDR LPICS))
	(GO LP)))
EXPR)

(DEFPROP TEXT?
 (LAMBDA(L)
  (LIST	(QUOTE AND)
	(LIST (QUOTE CONSP) (CADR L))
	(CONS (QUOTE EQ) (CONS (LIST (QUOTE CAR) (CADR L)) (QUOTE ((QUOTE TEXT)))))))
MACRO)

(DEFPROP DRAWLIS
 (LAMBDA(L)
  (PROG	(OLDH)
	(SETQ OLDH HORIZONTALFLAG)
	(RETURN
	 (PROG (HORIZONTALFLAG)
	       (SETQ HORIZONTALFLAG (NOT OLDH))
	       (RETURN
		(COND (HORIZONTALFLAG
		       (CONJOIN
			(PROGN (COMMENT (FOR NEW X IN L XLIST (EXPLAIN X)))
			       (PROG (FOR-VALUE LIST*X X)
				     (SETQ LIST*X L)
				LOOP*1
				     (COND ((NOT LIST*X) (GO RETURN)))
				     (SETQ X (CAR LIST*X))
				     (SETQ FOR-VALUE (CONS (EXPLAIN X) FOR-VALUE))
				NEXT*1
				NEXT*X
				     (SETQ LIST*X (CDR LIST*X))
				     (GO LOOP*1)
				RETURN
				     (RETURN FOR-VALUE)))
			-400.
			400.
			-400.
			400.))
		      (T (TOTEMPOLE (FOR NEW X IN L XLIST (EXPLAIN X)) -400. 400. -400. 400.))))))))
EXPR)

(DEFPROP RPOS
 (LAMBDA (LOC) (RIVECT (CAR LOC) (CDR LOC)))
EXPR)

(DEFPROP MAKELOCATION
 (LAMBDA (PIC) (COND ((LOCREC? PIC) PIC) (T (LOCREC LOCFIELD = (LOCATION PIC) UNLOCATED = PIC))))
EXPR)

(DEFPROP FOLLOWTEXT
 (LAMBDA(TEXTLIST)
  (PROGN (COMMENT
	  (FOR NEW
	       AT
	       IN
	       TEXTLIST
	       DO
	       (COND ((ATOM AT) (CRAMWORD AT))
		     ((AND (NUMBERP (CAR AT)) (NUMBERP (CDR AT))) (RPOS AT))
		     (T (FOLLOWTEXT AT)))))
	 (PROG (FOR-VALUE LIST*AT AT)
	       (SETQ LIST*AT TEXTLIST)
	  LOOP*1
	       (COND ((NOT LIST*AT) (GO RETURN)))
	       (SETQ AT (CAR LIST*AT))
	       (COND ((ATOM AT) (CRAMWORD AT))
		     ((AND (NUMBERP (CAR AT)) (NUMBERP (CDR AT))) (RPOS AT))
		     (T (FOLLOWTEXT AT)))
	  NEXT*1
	  NEXT*AT
	       (SETQ LIST*AT (CDR LIST*AT))
	       (GO LOOP*1)
	  RETURN
	       (RETURN FOR-VALUE))))
EXPR)

(DEFPROP CRAMWORD
 (LAMBDA(ATOM)
  (COND	((LITATOM ATOM)
	 (PROGN	(COMMENT
		 (FOR NEW
		      PN
		      IN
		      (GET ATOM (QUOTE PNAME))
		      DO
		      (GVECT 0. 0. 0. 0. 0.)
		      (DEPOSIT (LOCATE) (BOOLE 7. 1. (EXAMINE (MAKNUM PN (QUOTE FIXNUM)))))))
		(PROG (FOR-VALUE LIST*PN PN)
		      (SETQ LIST*PN (GET ATOM (QUOTE PNAME)))
		 LOOP*1
		      (COND ((NOT LIST*PN) (GO RETURN)))
		      (SETQ PN (CAR LIST*PN))
		      (GVECT 0. 0. 0. 0. 0.)
		      (DEPOSIT (LOCATE) (BOOLE 7. 1. (EXAMINE (MAKNUM PN (QUOTE FIXNUM)))))
		 NEXT*1
		 NEXT*PN
		      (SETQ LIST*PN (CDR LIST*PN))
		      (GO LOOP*1)
		 RETURN
		      (RETURN FOR-VALUE))))
	((NOT (NUMBERP ATOM)) (HELP))
	((GREATERP ATOM 9.) (FOR NEW X IN (EXPLODE ATOM) DO (CRAMWORD X)))
	(T (GVECT 0. 0. 0. 0. 0.) (DEPOSIT (LOCATE) (ADD1 (LSH (PLUS 48. (FIX ATOM)) 1.))))))
EXPR)

(DEFPROP LOCATION
 (LAMBDA(PICTURE)
  (PROG	(XMIN YMIN XMAX YMAX LOC)
	(SETQ XMIN (SETQ YMIN (MINUS (SETQ XMAX (SETQ YMAX -10000.)))))
	(COND ((LOCREC? PICTURE) (RETURN (LOCFIELD PICTURE)))
	      ((STREAM? PICTURE)
	       (PROGN (COMMENT
		       (FOR NEW
			    POSITION
			    IN
			    (CDR PICTURE)
			    DO
			    (SETQ XMIN (*MIN XMIN (CAR POSITION)))
			    (SETQ YMIN (*MIN YMIN (CDR POSITION)))
			    (SETQ XMAX (*MAX XMAX (CAR POSITION)))
			    (SETQ YMAX (*MAX YMAX (CDR POSITION)))))
		      (PROG (FOR-VALUE LIST*POSITION POSITION)
			    (SETQ LIST*POSITION (CDR PICTURE))
		       LOOP*1
			    (COND ((NOT LIST*POSITION) (GO RETURN)))
			    (SETQ POSITION (CAR LIST*POSITION))
			    (SETQ XMIN (*MIN XMIN (CAR POSITION)))
			    (SETQ YMIN (*MIN YMIN (CDR POSITION)))
			    (SETQ XMAX (*MAX XMAX (CAR POSITION)))
			    (SETQ YMAX (*MAX YMAX (CDR POSITION)))
		       NEXT*1
		       NEXT*POSITION
			    (SETQ LIST*POSITION (CDR LIST*POSITION))
			    (GO LOOP*1)
		       RETURN
			    (RETURN FOR-VALUE))))
	      ((STREAMLIST? PICTURE)
	       (PROGN (COMMENT
		       (FOR NEW
			    STREAM
			    IN
			    (STREAMS PICTURE)
			    DO
			    (SETQ LOC (LOCATION STREAM))
			    (SETQ XMIN (*MIN XMIN (CAR LOC)))
			    (SETQ XMAX (*MAX XMAX (CADR LOC)))
			    (SETQ YMIN (*MIN YMIN (CADDR LOC)))
			    (SETQ YMAX (*MAX YMAX (CADDDR LOC)))))
		      (PROG (FOR-VALUE LIST*STREAM STREAM)
			    (SETQ LIST*STREAM (STREAMS PICTURE))
		       LOOP*1
			    (COND ((NOT LIST*STREAM) (GO RETURN)))
			    (SETQ STREAM (CAR LIST*STREAM))
			    (SETQ LOC (LOCATION STREAM))
			    (SETQ XMIN (*MIN XMIN (CAR LOC)))
			    (SETQ XMAX (*MAX XMAX (CADR LOC)))
			    (SETQ YMIN (*MIN YMIN (CADDR LOC)))
			    (SETQ YMAX (*MAX YMAX (CADDDR LOC)))
		       NEXT*1
		       NEXT*STREAM
			    (SETQ LIST*STREAM (CDR LIST*STREAM))
			    (GO LOOP*1)
		       RETURN
			    (RETURN FOR-VALUE))))
	      ((NOSCALE? PICTURE) (RETURN (LOCATION (CDR PICTURE))))
	      ((SCALE? PICTURE)
	       (SETQ LOC (LOCATION (UNSCALED PICTURE)))
	       (SETQ XMIN (PLUS (XLOC PICTURE) (TIMES (XSCLE PICTURE) (CAR LOC))))
	       (SETQ XMAX (PLUS (XLOC PICTURE) (TIMES (XSCLE PICTURE) (CADR LOC))))
	       (SETQ YMIN (PLUS (YLOC PICTURE) (TIMES (YSCLE PICTURE) (CADDR LOC))))
	       (SETQ YMAX (PLUS (YLOC PICTURE) (TIMES (YSCLE PICTURE) (CADDDR LOC))))
	       (RETURN (LIST (*MIN XMIN XMAX) (*MAX XMIN XMAX) (*MIN YMIN YMAX) (*MAX YMIN YMAX))))
	      ((TEXT? PICTURE)
	       (RETURN
		(LIST (CAR (TEXTLOC PICTURE))
		      (PLUS (CAR (TEXTLOC PICTURE))
			    (TIMES (PROGN (COMMENT
					   (FOR	NEW
						X
						IN
						(THE-TEXT PICTURE)
						WHEN
						(ATOM X)
						PLUS
						(ADD1 (FLATSIZE X))))
					  (PROG	(FOR-VALUE LIST*X X)
						(SETQ FOR-VALUE 0.)
						(SETQ LIST*X (THE-TEXT PICTURE))
					   LOOP*1
						(COND ((NOT LIST*X) (GO RETURN)))
						(SETQ X (CAR LIST*X))
						(COND ((NOT (ATOM X)) (GO NEXT*X)))
						(SETQ FOR-VALUE (PLUS (ADD1 (FLATSIZE X)) FOR-VALUE))
					   NEXT*1
					   NEXT*X
						(SETQ LIST*X (CDR LIST*X))
						(GO LOOP*1)
					   RETURN
						(RETURN FOR-VALUE)))
				   CHARSIZE))
		      (DIFFERENCE (CDR (TEXTLOC PICTURE)) CHARHEIGHT)
		      (PLUS (CDR (TEXTLOC PICTURE)) CHARHEIGHT))))
	      (T (HELP)))
	(RETURN (LIST XMIN XMAX YMIN YMAX))))
EXPR)

(DEFPROP REV
 (LAMBDA (PIC) (SCALEREC XSCLE = -1. UNSCALED = PIC))
EXPR)

(DEFPROP CONJOIN
 (LAMBDA(LPICS XMIN XMAX YMIN YMAX)
  (PROG	(RSLT DELTX TEM)
	(SETQ DELTX (QUOTIENT (DIFFERENCE XMAX XMIN) (LENGTH LPICS)))
   LP	(COND ((NULL LPICS) (RETURN RSLT)))
	(SETQ TEM (FITIN (CAR LPICS) XMIN (PLUS XMIN (TIMES 0.79999999 DELTX)) YMIN YMAX))
	(COND
	 ((CDR LPICS)
	  (SETQ	RSLT
		(UNIONPIC RSLT
			  (LIST	(QUOTE STREAM)
				(CONS (PLUS XMIN (TIMES 0.89999999 DELTX)) YMIN)
				(CONS (PLUS XMIN (TIMES 0.89999999 DELTX)) YMAX))))))
	(SETQ XMIN (PLUS XMIN DELTX))
	(SETQ RSLT (UNIONPIC RSLT TEM))
	(SETQ LPICS (CDR LPICS))
	(GO LP)))
EXPR)

(DEFPROP FITIN
 (LAMBDA(PICTURE XMIN XMAX YMIN YMAX)
  (PROG	(LOC XS YS)
	(SETQ LOC (LOCATION PICTURE))
	(SETQ XS
	      (COND ((EQUAL (CADR LOC) (CAR LOC)) 1.)
		    (T (QUOTIENT (DIFFERENCE XMAX XMIN) (DIFFERENCE (CADR LOC) (CAR LOC))))))
	(SETQ YS
	      (COND ((EQUAL YMIN YMAX) 1.)
		    (T (QUOTIENT (DIFFERENCE YMAX YMIN) (DIFFERENCE (CADR (CDDR LOC)) (CAR (CDDR LOC)))))))
	(RETURN
	 (LOCREC LOCFIELD
		 =
		 (LIST XMIN XMAX YMIN YMAX)
		 UNLOCATED
		 =
		 (SCALEREC YLOC
			   =
			   (DIFFERENCE YMIN (TIMES YS (CADDR LOC)))
			   XLOC
			   =
			   (DIFFERENCE XMIN (TIMES XS (CAR LOC)))
			   XSCLE
			   =
			   XS
			   YSCLE
			   =
			   YS
			   UNSCALED
			   =
			   PICTURE)))))
EXPR)

(DEFPROP BOX
 (LAMBDA(PICTURE)
  (PROG	(LOC XMIN XMAX YMIN YMAX)
	(SETQ LOC (LOCATION PICTURE))
	(SETQ XMIN (CAR LOC))
	(SETQ XMAX (CADR LOC))
	(SETQ YMIN (CADDR LOC))
	(SETQ YMAX (CADDDR LOC))
	(RETURN
	 (UNIONPIC (SCALEREC XLOC
			     =
			     (QUOTIENT (PLUS XMAX XMIN) 2.)
			     YLOC
			     =
			     (QUOTIENT (PLUS YMAX YMIN) 2.)
			     XSCLE
			     =
			     (QUOTIENT (DIFFERENCE XMAX XMIN) 180.0)
			     YSCLE
			     =
			     (QUOTIENT (DIFFERENCE YMAX YMIN) 180.0)
			     UNSCALED
			     =
			     BOXSTREAM)
		   PICTURE))))
EXPR)

(DEFPROP UNIONPIC
 (LAMBDA(A B)
  (COND	((NULL A) B)
	((NULL B) A)
	((STREAMLIST? B) (STREAMLIST FROM B STREAMS = (CONS A **)))
	((STREAMLIST? A) (STREAMLIST FROM A STREAMS = (CONS B **)))
	(T (STREAMLIST STREAMS = (LIST A B)))))
EXPR)

(DEFPROP STREAMLIST?
 (LAMBDA(L)
  (LIST	(QUOTE AND)
	(LIST (QUOTE CONSP) (CADR L))
	(CONS (QUOTE EQ) (CONS (LIST (QUOTE CAR) (CADR L)) (QUOTE ((QUOTE STREAMLIST)))))))
MACRO)

(DEFPROP S
 (LAMBDA NIL (SHOW 1.))
EXPR)

(DEFPROP CHARSIZE
 (CHARSIZE . 10.)
VALUE)

(DEFPROP XBOT
 (XBOT . 0.)
VALUE)

(DEFPROP XSCL
 (XSCL . 1.0)
VALUE)

(DEFPROP YBOT
 (YBOT . 0.)
VALUE)

(DEFPROP YSCL
 (YSCL . 1.0)
VALUE)

(DEFPROP STREAM?
 (LAMBDA(L)
  (LIST	(QUOTE AND)
	(LIST (QUOTE CONSP) (CADR L))
	(CONS (QUOTE EQ) (CONS (LIST (QUOTE CAR) (CADR L)) (QUOTE ((QUOTE STREAM)))))))
MACRO)

(DEFPROP FOLLOW
 (LAMBDA(PICTURE)
  (COND	((LOCREC? PICTURE) (FOLLOW (UNLOCATED PICTURE)))
	((STREAM? PICTURE) (POS (FIRSTLOC PICTURE)) (FOR NEW POSITION IN (RESTLOCS PICTURE) DO (DPOS POSITION)))
	((STREAMLIST? PICTURE) (FOR NEW STREAM IN (STREAMS PICTURE) DO (FOLLOW STREAM)))
	((SCALE? PICTURE)
	 (PROG (OLDXSCL OLDYSCL OLDXBOT OLDYBOT)
	       (SETQ OLDXSCL XSCL)
	       (SETQ OLDYSCL YSCL)
	       (SETQ OLDXBOT XBOT)
	       (SETQ OLDYBOT YBOT)
	       (PROG (XBOT XSCL YBOT YSCL)
		     (SETQ XBOT (PLUS OLDXBOT (TIMES OLDXSCL (XLOC PICTURE))))
		     (SETQ YBOT (PLUS OLDYBOT (TIMES OLDYSCL (YLOC PICTURE))))
		     (SETQ XSCL (TIMES OLDXSCL (XSCLE PICTURE)))
		     (SETQ YSCL (TIMES OLDYSCL (YSCLE PICTURE)))
		     (FOLLOW (UNSCALED PICTURE)))))
	((TEXT? PICTURE)
	 (AIVECT (SCALE (CAR (TEXTLOC PICTURE)) XBOT 1.) (SCALE (CDR (TEXTLOC PICTURE)) YBOT 1.))
	 (FOLLOWTEXT (THE-TEXT PICTURE)))
	((NOSCALE? PICTURE) (PROG (XSCL YSCL) (SETQ XSCL (SETQ YSCL 1.)) (FOLLOW (CDR PICTURE))))
	(T (HELP))))
EXPR)

(DEFPROP SCALE
 (LAMBDA (PSN BOT SCALE) (FIX (PLUS BOT (TIMES SCALE PSN))))
EXPR)

(DEFPROP DPOS
 (LAMBDA (PSN) (AVECT (SCALEX (CAR PSN)) (SCALEY (CDR PSN))))
EXPR)

(DEFPROP SCALEY
 (LAMBDA (YPSN) (SCALE YPSN YBOT YSCL))
EXPR)

(DEFPROP SCALEX
 (LAMBDA (X) (SCALE X XBOT XSCL))
EXPR)

(DEFPROP POS
 (LAMBDA (PSN) (AIVECT (SCALEX (CAR PSN)) (SCALEY (CDR PSN))))
EXPR)

(DEFPROP DOWNVEC
 (DOWNVEC 5. . -15.)
VALUE)

(DEFPROP UPVEC
 (UPVEC 5. . 15.)
VALUE)

(DEFPROP CHARHEIGHT
 (CHARHEIGHT . 25.)
VALUE)

(SPECIAL XBOT XSCL YBOT YSCL CHARSIZE DOWNVEC UPVEC CHARHEIGHT)

(RECORD (QUOTE STREAM) (QUOTE (STREAM-ID FIRSTLOC . RESTLOCS)))

(RECORD (QUOTE STREAMLIST) (QUOTE (STREAMLIST-ID . STREAMS)))

(DEFPROP SCALE?
 (LAMBDA(L)
  (LIST	(QUOTE AND)
	(LIST (QUOTE CONSP) (CADR L))
	(CONS (QUOTE EQ) (CONS (LIST (QUOTE CAR) (CADR L)) (QUOTE ((QUOTE SCALE)))))))
MACRO)

(RECORD (QUOTE SCALEREC) (QUOTE (SCALE-ID XLOC YLOC XSCLE YSCLE . UNSCALED)))

(RECORD (QUOTE LOCREC) (QUOTE (LOCID LOCFIELD . UNLOCATED)))

(DEFPROP LOCREC?
 (LAMBDA(L)
  (LIST	(QUOTE AND)
	(LIST (QUOTE CONSP) (CADR L))
	(CONS (QUOTE EQ) (CONS (LIST (QUOTE CAR) (CADR L)) (QUOTE ((QUOTE LOCREC)))))))
MACRO)

(RECORD (QUOTE TEXTNODE) (QUOTE (TEXTID TEXTLOC . THE-TEXT)))

(DEFLIST (QUOTE
	  ((STREAM-ID STREAM)
	   (TEXTID TEXT)
	   (TEXTLOC (0. . 0.))
	   (STREAMLIST-ID STREAMLIST)
	   (SCALE-ID SCALE)
	   (LOCID LOCREC)
	   (YLOC 0.)
	   (XLOC 0.)
	   (XSCLE 1.)
	   (YSCLE 1.)))
	 (QUOTE RECDEFAULT))

(SETQ ARROWFLAG NIL)